module.exports = app => {
  // const router = require('express').Router()
  const express = require('express')
  const router = express.Router()
  const Category = require('../../models/Category')
  const Article = require('../../models/Article')
  const Hero = require('../../models/Hero')

  // 新闻列表接口
  router.get('/new/list', async (req, res) => {
    // 方法1
    // c parent = await Category.findOne({
    //   name: '新闻分类'
    // }).populate({
    //   path: 'children',
    //   populate:{
    //     path: 'newsList'
    //   }
    // }).lean()
    // res.send(parent)onst
    // 方法2
    const parent = await Category.findOne({
      name: '新闻分类'
    })
    const cats = await Category.aggregate([
      // 聚合
      { $match: { parent: parent._id } },
      {
        $lookup: {
          from: 'articles',
          localField: '_id',
          foreignField: 'categories',
          as: 'newsList'
        }
      },
      {
        $addFields: {
          // 过滤出五条数据
          newsList: { $slice: ['$newsList', 5]}
        }
      }
    ])
    // 把热门拿出来
    const subCats = cats.map( v => v._id )
    cats.unshift({
      name: '热门',
      newsList: await Article.find().where({
        categories: { $in: subCats }
      }).populate('categories').limit(5).lean()
    })
    // 热门的NewsList 的name 改为原来的 
    cats.map( cat => {
      cat.newsList.map(news => {
        news.categoryName = cat.name === '热门' ? news.categories[0].name : cat.name
        return news
      })
      return cat
    })
    res.send(cats)
  })

  // 英雄列表接口
  router.get('/hero/list', async (req, res) => {
    const parent = await Category.findOne({
      name: '英雄分类'
    })
    const cats = await Category.aggregate([
      // 聚合
      { $match: { parent: parent._id } },
      {
        $lookup: {
          from: 'heroes',
          localField: '_id',
          foreignField: 'categories',
          as: 'heroList'
        }
      }
    ])
    // 把热门拿出来
    const subCats = cats.map( v => v._id )
    cats.unshift({
      name: '热门',
      heroList: await Hero.find().where({
        categories: { $in: subCats }
      }).limit(10).lean()
    })
    res.send(cats)
  })

  // 文章详情
  router.get('/articles/:id', async (req,res) => {
    const data = await Article.findById(req.params.id).lean()
    data.related = await Article.find().where({
      categories: { $in: data.categories },
      // 跳过本身
      title:{ $ne: data.title }
    }).limit(2)
    res.send(data)
  })

  // 英雄详情
  router.get('/heroes/:id', async (req,res) => {
    const data = await Hero
    .findById(req.params.id)
    .populate('categories items1 items2 partners.hero')
    .lean()
    // 查找关联 populate
    res.send(data)
  })
  app.use('/web/api', router)
}


// // 录入英雄
// router.get('/heroes/init', async(req,res)=>{
//   await Hero.deleteMany({})
//   const rawData = []
//   for(let cat of rawData) {
//     if( cat.name === '热门' ){
//       continue
//     }
//     // 找到当前分类在数据库中对应的数据
//     const category = await Category.findOne({
//       name: cat.name
//     })
//     cat.heroes = cat.heroes.map(hero => {
//       hero.categories = [category]
//       return hero
//     })
//     // 录入英雄
//     await Hero.insertMany(cat.heroes)
//   }
//   res.send(await Hero.find())
// })
